/*
 * AdmAuthenticationProcessingFilter.java
 *
 * Created on 14 de septiembre de 2004, 06:02 PM
 */

package pe.gob.mef.logistica.security.filter;

import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.acegisecurity.Authentication;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.jlis.core.filter.JLisAuthenticationProcessingFilter;
import org.jlis.core.util.HashUtil;
import org.jlis.jdbc.logic.JdbcLogic;
import org.jlis.jdbc.logic.JdbcLogicImpl;

import pe.gob.mef.logistica.security.bean.Entidad;
import pe.gob.mef.logistica.security.bean.UsuarioLogistica;

import pe.gob.mef.logistica.web.util.ConstantesLogistica;

import org.jlis.core.list.OptionList;
import org.jlis.core.bean.Option;
import org.jlis.ibatis.dao.DataUserIbatisDao;

/**
 *
 * @author  Daniel Hinostroza Vintes
 */

public class LogisticaAuthenticationProcessingFilter extends JLisAuthenticationProcessingFilter {
	   protected final Log log = LogFactory.getLog(getClass());
    private DataUserIbatisDao dataUserIbatisDao;
    
    protected String obtainUsername(HttpServletRequest request) {
        return super.obtainUsername(request).toUpperCase();
    }
    
    protected String obtainPassword(HttpServletRequest request) {
        return super.obtainPassword(request).toUpperCase();
    }
    
    protected void onSuccessfulAuthentication(HttpServletRequest request, HttpServletResponse response, Authentication authResult) {
        UsuarioLogistica usuario = new UsuarioLogistica();
        super.onSuccessfulAuthentication(usuario, request, response, authResult);
       
        
        HashUtil filter = new HashUtil();
        filter.put("usuario", usuario.getLogin());
        filter.put("pAplica", ConstantesLogistica.NOMBRE_APLICACION);
        String modulo=dataUserIbatisDao.getXApli(filter);
        usuario.setModulo(modulo);
        HashUtil element= (HashUtil)dataUserIbatisDao.getDataUser(filter);
        usuario.setDescripcion(element.getString("NOMBRE"));
         
        Entidad entidad = new Entidad();
        entidad.setCodigo(element.getString("COD_ENTIDAD"));
        entidad.setNombre(element.getString("NOMBRE"));
        
        usuario.setEntidad(entidad);
        
        filter.clear();
        filter.put("usuario", usuario.getLogin());
         OptionList permisos =  dataUserIbatisDao.getRelacionAplicacionCodigo(filter);
       // OptionList permisos = jdbcLogic.loadListFromResultSet("adm.login.privilegios", filter);
        HashUtil paginasPrivilegios = new HashUtil();
        for (int i = 0; i < permisos.size(); i++) {
            Option op = permisos.getOption(i);
            String pagina = op.getCodigo();
            String privilegio = op.getDescripcion();
            HashUtil priv = null;
            if (paginasPrivilegios.containsKey(pagina)) {
                priv = (HashUtil)paginasPrivilegios.get(pagina);
            } else {
                priv = new HashUtil();
            }
            priv.put(privilegio, privilegio);
            paginasPrivilegios.replaceValue(pagina, priv);
        }
        usuario.setPaginasPrivilegios(paginasPrivilegios);
    }

    public void setDataUserIbatisDao(DataUserIbatisDao dataUserIbatisDao) {
        this.dataUserIbatisDao = dataUserIbatisDao;
    }
    
}
